package com.zgroup.common;

import java.util.ArrayList;
import java.util.List;

import org.displaytag.pagination.PaginatedList;
import org.displaytag.properties.SortOrderEnum;

/**
 * PaginatedList的内建实现，每一页的大小默认为15
 */
public class PaginationAdapter implements PaginatedList {
    /**
     * 当前页的结果集
     */
    private List list;
    /**
     * 满足条件的结果总数
     */
    private int fullListSize;
    /**
     * 每一页的记录数
     */
    private int objectsPerPage = Constants.SHOW_LIST_SIZE;
    /**
     * 当前页号,从1开始
     */
    private int pageNumber;
    /**
     * 排序属性名称
     */
    private String sortCriterion;
    /**
     * 排序规则，asc，SortOrderEnum.fromCode(new Integer(1))
     * desc，SortOrderEnum.fromCode(new Integer(2))
     */
    private SortOrderEnum sortDirection;
    /**
     * 用来唯一标识一个table，用于处理同一个页面中存在多个displaytable的问题
     */
    private String searchId;

    public PaginationAdapter() {
        list = new ArrayList();
    }

    public PaginationAdapter(List list) {
        this.list = list;
        this.fullListSize = list.size();
        this.objectsPerPage = list.size();
        this.pageNumber = 1;
    }

    /**
     * 使用指定的参数构造一个Pagination对象
     *
     * @param list           当前页的结果集
     * @param fullListSize   满足条件的结果总数
     * @param objectsPerPage 每一页的记录数
     * @param pageNumber     当前页号,从1开始
     */
    public PaginationAdapter(List list, int fullListSize, int objectsPerPage, int pageNumber) {
        this.list = list;
        this.fullListSize = fullListSize;
        this.objectsPerPage = objectsPerPage;
        this.pageNumber = pageNumber;
    }

    /**
     * 使用指定的参数构造一个Pagination对象,每一页的记录数使用默认值15
     *
     * @param list         当前页的结果集
     * @param fullListSize 满足条件的结果总数
     * @param pageNumber   当前页号,从1开始
     */
    public PaginationAdapter(List list, int fullListSize, int pageNumber) {
        this.list = list;
        this.fullListSize = fullListSize;
        this.pageNumber = pageNumber;
    }

    /**
     * 满足条件的结果总数
     */
    public int getFullListSize() {
        return fullListSize;
    }

    /**
     * 当前页的结果集
     */
    public List getList() {
        return list;
    }

    /**
     * 当前页的结果集
     *
     * @param list
     * @author 王战英
     */
    public void setList(List list) {
        this.list = list;
    }

    /**
     * 每一页的记录数
     */
    public int getObjectsPerPage() {
        return objectsPerPage;
    }

    /**
     * 当前页号,从1开始
     */
    public int getPageNumber() {
        return pageNumber;
    }

    /**
     * 用来唯一标识一个table，用于处理同一个页面中存在多个displaytable的问题
     */
    public String getSearchId() {
        if (this.searchId == null) {
            return "dispalyTable";
        }
        return searchId;
    }

    /**
     * 排序属性名称
     */
    public String getSortCriterion() {
        return sortCriterion;
    }

    /**
     * 排序规则，asc，SortOrderEnum.fromCode(new Integer(1))
     * desc，SortOrderEnum.fromCode(new Integer(2))
     */
    public SortOrderEnum getSortDirection() {
        return sortDirection;
    }

    /**
     * 满足条件的结果总数
     *
     * @param fullListSize
     * @author 王战英
     */
    public void setFullListSize(int fullListSize) {
        this.fullListSize = fullListSize;
    }

    /**
     * 每一页的记录数
     *
     * @param objectsPerPage
     * @author 王战英
     */
    public void setObjectsPerPage(int objectsPerPage) {
        this.objectsPerPage = objectsPerPage;
    }

    /**
     * 当前页号,从1开始
     *
     * @param pageNumber
     * @author 王战英
     */
    public void setPageNumber(int pageNumber) {
        this.pageNumber = pageNumber;
    }

    /**
     * 排序属性名称
     *
     * @param sortCriterion
     * @author 王战英
     */
    public void setSortCriterion(String sortCriterion) {
        this.sortCriterion = sortCriterion;
    }

    /**
     * 排序规则，asc，SortOrderEnum.fromCode(new Integer(1))
     * desc，SortOrderEnum.fromCode(new Integer(2))
     *
     * @param sortDirection
     * @author 王战英
     */
    public void setSortDirection(SortOrderEnum sortDirection) {
        this.sortDirection = sortDirection;
    }

    /**
     * 用来唯一标识一个table，用于处理同一个页面中存在多个displaytable的问题
     *
     * @param searchId
     * @author 王战英
     */
    public void setSearchId(String searchId) {
        this.searchId = searchId;
	}

}